其他
facet_plot: 关联数据和进化树的通用方法
ggtree 提供gheatmap
可视化热图和 msaplot
可视化多重序列比对,并且和进化树关联起来。但这远远不够,我们有太多的数据要可视化且与进化树关联,以便于我们解释结果或者发现规律。比如 dotplot
画 SNP 位点 (e.g. using geom_point(shape='|')
), barplot
画trait values (e.g. using geom_barh(stat='identity')
) 等等。
为了让不同的数据可以和进化树关联起来,我实现了facet_plot函数,它接收geom函数去画一个数据框,然后在额外的panel展示出来,当然数据会自己按照进化树的拓扑结构重排。
tr <- rtree(30)
p <- ggtree(tr)
d1 <- data.frame(id=tr$tip.label, location=sample(c("GZ", "HK", "CZ"), 30, replace=TRUE))
p1 <- p %<+% d1 + geom_tippoint(aes(color=location))
d2 <- data.frame(id=tr$tip.label, val=rnorm(30, sd=3))
p2 <- facet_plot(p1, panel="dot", data=d2, geom=geom_point,
aes(x=val), color='firebrick') + theme_tree2()
ggplot2中多半的geom是画垂直的图形对象,但做为和进化树关联的图,我们需要水平的图形对象,ggstance提供了许多水平版本的geom函数:
geom_barh()
geom_histogramh()
geom_linerangeh()
geom_pointrangeh()
geom_errorbarh()
geom_crossbarh()
geom_boxploth()
geom_violinh()
这样我们就可以把barplot, boxplot等和进化树关联起来可视化了,可以应对不同数据的可视化需求:
library(ggstance)
d3 <- data.frame(id = rep(tr$tip.label, each=2),
value = abs(rnorm(60, mean=100, sd=50)),
category = rep(LETTERS[1:2], 30))
p3 <- facet_plot(p2, panel = 'Stacked Barplot', data = d3,
geom = geom_barh,
mapping = aes(x = value, fill = as.factor(category)),
stat='identity' )
d4 = data.frame(id=rep(tr$tip.label, each=20),
val=as.vector(sapply(1:30, function(i)
rnorm(20, mean=i)))
)
p4 <- facet_plot(p3, panel="Boxplot", data=d4, geom_boxploth,
mapping = aes(x=val, group=label, color=location))
这个函数写在ggjoy之前,因为facet_plot函数设计的通用性,ggjoy出来之后,直接就可以使用。